package com.br.negocio.controller;

import java.util.Date;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.br.negocio.dao.EstadoDAO;
import com.br.negocio.vo.EstadoVO;

@Service("controllerEstado")
public class ControllerEstado {

	@Resource
	private EstadoDAO estadoDAO;
	
	public void atualizarEstado(EstadoVO estadoVO) {
		
		if (estadoVO == null) {
			throw new IllegalArgumentException("Um estado valido e obrigatorio.");
		}
		
		if ((estadoVO.getDescricao() == null) ||
			(estadoVO.getDescricao().trim().equals(""))) {
			throw new IllegalArgumentException("Uma descricao e necesseria para o estado.");
		}
		
		if ((estadoVO.getSigla() == null) ||
			(estadoVO.getSigla().trim().equals(""))) {
			throw new IllegalArgumentException("Uma sigla e necessaria para o estado.");
		}
		
		if (estadoVO.getPaisVO() == null) {
			throw new IllegalArgumentException("Um pais valido e obrigatorio.");
		}
		
		if (estadoVO.getPaisVO().getCodigo() == 0) {
			throw new IllegalArgumentException("e necesserio selecionar um pais para o estado.");
		}
		
		if ((!estadoDAO.validaDuplicado(estadoVO)) &&
			(estadoVO.getCodigo() == 0)) {
			throw new IllegalArgumentException("Este estado ja existe.");
		}

		if (estadoVO.getCodigo() == 0) {
			estadoVO.setDataCriacao(new Date());
			estadoVO.setDataAlteracao(new Date());
			estadoDAO.inserirEstado(estadoVO);
		} else {
			estadoVO.setDataAlteracao(new Date());
			estadoDAO.atualizarEstado(estadoVO);
		}
	}

	public void removerEstado(EstadoVO estadoVO) {
		
		if (estadoVO == null) {
			throw new IllegalArgumentException("Um estado v�lido � obrigat�rio.");
		}
		
		if (estadoVO.getCodigo() == 0) {
			throw new IllegalStateException("A entidade tem um c�digo inv�lido: " + estadoVO.getDescricao());
		}
		
		estadoDAO.removerEstado(estadoVO);
	}

	public EstadoVO obterEstado(EstadoVO estadoVO) {
		
		if (estadoVO == null) {
			throw new IllegalArgumentException("Um estado v�lido � obrigat�rio.");
		}

		return estadoDAO.obterEstado(estadoVO);
	}

	public List<EstadoVO> obterListaEstado() {
		return estadoDAO.obterListaEstado();
	}
	
}